#ifndef __SYSCALL_MONITOR_H__
#define __SYSCALL_MONITOR_H__

// #define TASK_COMM_LEN
// #include "vmlinux.h"

// 定义输出模式宏
// #define OUTPUT_MODE_PERF_EVENT    // 实时输出模式
#define OUTPUT_MODE_MAP_POLL        // 定期轮询模式

extern int my_pid;

// 进程信息结构体
struct process_info {
    __u64 syscall_count;        // 系统调用次数
    __u64 last_run_time;        // 上次运行时间
    __u64 total_run_time;       // 总运行时间
    __u32 current_cpu;          // 当前CPU
    __u32 pid;                  // 进程ID
    __u32 ppid;                 // 父进程ID
    char comm[16];   // 进程名
    __u64 start_time;           // 启动时间
};

// 系统调用监控结构体
struct syscall_event {
    __u32 pid;                  // 进程ID
    __u32 syscall_nr;           // 系统调用号
    __u64 timestamp;            // 调用时间戳
    __u64 duration;             // 执行耗时
    __s64 retval;               // 返回值
    char comm[16];   // 进程名
    __u32 pad;                  // 内存对齐填充
};

// 进程生命周期事件
struct process_lifecycle_event {
    __u32 pid;                  // 进程ID
    __u32 ppid;                 // 父进程ID
    __u32 event_type;           // 事件类型: 0-create, 1-exit
    __u64 timestamp;            // 时间戳
    char comm[16];   // 进程名
};

// CPU调度信息
struct cpu_sched_info {
    __u32 pid;                  // 进程ID
    __u32 cpu;                  // CPU编号
    __u64 timestamp;            // 时间戳
    __u64 wait_time;            // 等待时间
    __u64 run_time;             // 运行时间
    char comm[16];   // 进程名
};

// 内存分配事件
struct memory_event {
    __u32 pid;                  // 进程ID
    __u32 event_type;           // 事件类型: 0-kmalloc, 1-mmap, 2-slab_alloc
    __u64 size;                 // 分配大小
    __u64 timestamp;            // 时间戳
    __u64 addr;                 // 分配地址
    char comm[16];   // 进程名
};

// 文件IO事件
struct file_io_event {
    __u32 pid;                  // 进程ID
    __u32 fd;                   // 文件描述符
    __u64 bytes;                // 读写字节数
    __u64 timestamp;            // 时间戳
    __u32 operation;            // 操作类型: 0-read, 1-write
    __u64 latency;              // IO延迟
    char filename[256];         // 文件名
    char comm[16];   // 进程名
};

// 网络连接事件
struct network_connection {
    __u32 pid;                  // 进程ID
    __u32 sport;                // 源端口
    __u32 dport;                // 目标端口
    __u32 saddr;                // 源IP
    __u32 daddr;                // 目标IP
    __u16 protocol;             // 协议类型
    __u32 event_type;           // 事件类型: 0-connect, 1-close, 2-state_change
    __u64 timestamp;            // 时间戳
    char comm[16];   // 进程名
};

// 网络流量统计
struct network_traffic {
    __u32 pid;                  // 进程ID
    __u64 bytes_sent;           // 发送字节数
    __u64 bytes_received;       // 接收字节数
    __u64 rtt;                  // 往返时间
    __u64 retransmits;          // 重传次数
    __u64 timestamp;            // 时间戳
    char comm[16];   // 进程名
};

// 锁竞争事件
struct lock_contention_event {
    __u32 pid;                  // 进程ID
    __u32 lock_type;            // 锁类型: 0-mutex, 1-spinlock
    __u64 wait_time;            // 等待时间
    __u64 timestamp;            // 时间戳
    char comm[16];   // 进程名
};

// 中断事件
struct interrupt_event {
    __u32 irq_num;              // 中断号
    __u32 cpu;                  // CPU编号
    __u32 event_type;           // 事件类型: 0-hard, 1-soft
    __u64 duration;             // 处理耗时
    __u64 timestamp;            // 时间戳
};

// 页错误事件
struct page_fault_event {
    __u32 pid;                  // 进程ID
    __u64 address;              // 错误地址
    __u32 fault_type;           // 错误类型
    __u64 timestamp;            // 时间戳
    char comm[16];   // 进程名
};

// 安全审计事件
struct security_event {
    __u32 pid;                  // 进程ID
    __u32 event_type;           // 事件类型: 0-file_access, 1-privilege, 2-module_load
    __u64 timestamp;            // 时间戳
    char path[256];             // 文件路径或相关信息
    char comm[16];   // 进程名
};

// 容器监控事件
struct container_event {
    __u64 cgroup_id;            // cgroup ID
    __u32 pid;                  // 进程ID
    __u32 event_type;           // 事件类型: 0-create, 1-destroy, 2-resource
    __u64 cpu_usage;            // CPU使用量
    __u64 memory_usage;         // 内存使用量
    __u64 network_tx;           // 网络发送量
    __u64 network_rx;           // 网络接收量
    __u64 timestamp;            // 时间戳
    char container_id[64];      // 容器ID
    char comm[16];   // 进程名
};

#endif /* __SYSCALL_MONITOR_H__ */

// 常用系统调用号（基于x86_64架构）
#ifndef __NR_open
#define __NR_open 2
#endif
#ifndef __NR_openat
#define __NR_openat 257
#endif
#ifndef __NR_read
#define __NR_read 0
#endif
#ifndef __NR_write
#define __NR_write 1
#endif
#ifndef __NR_connect
#define __NR_connect 42
#endif
#ifndef __NR_clone
#define __NR_clone 56
#endif
#ifndef __NR_mmap
#define __NR_mmap 9
#endif
#ifndef __NR_socket
#define __NR_socket 41
#endif
#ifndef __NR_execve
#define __NR_execve 59
#endif